iT邦幫忙

2022 iThome 鐵人賽

DAY 2
3
自我挑戰組

三十天,PG與我系列 第 2

Postgre 使用者與權限管理

  • 分享至 

  • xImage
  •  

上一篇文章提到了Postgres可以建立多個使用者(User)以及角色(Role),限制他們可以對資料庫進行的操作來提升安全性,這次來說明如何操作相關的功能。

名詞

Role:角色,代表一組授予資料庫的權限,一個Role下面可以有一到多組Role,也可以讓包含某一組Role的其他Role擁有他的權限
在PostgreSQL裡面,Role可以用來表示單一使用者,或是多個使用者的群組

語法

創建一個新的Role

例子:
建立單純表示權限的Role
CREATE ROLE engineer WITH NOLOGIN;
CREATE ROLE music_lover;

假設已經透過超級使用者postgres連進了資料庫,輸入"CREATE ROLE jack WITH LOGIN PASSWORD 'p@ssw0rd';"指令,可以建立一隻名叫jack以及密碼為p@ssw0rd的角色來讓使用者做登入。
** 為什麼建立使用者不是用CREATE USER? **
A:CREATE USER是另一種語法。在Postgres裡面如果沒有特別指定,Role被創建之後僅是代表一組權限(WITH NOLOGIN),如果要用做登入的話就是向上面例子一樣加入WITH lOGIN,輸入CREATE USER也可以達成一樣的效果。

將某個Role的權限套用在另外一個Role上面

例子:
在先前建立的Role裡面建立一個叫做rabbit的可登入Role
CREATE ROLE rabbit WITH LOGIN PASSWORD 'iamsocute' IN ROLE music_lover;
將Role 'engineer'的權限賦予到Role 'jack'的上面
GRANT engineer TO jack;

控制Role存取資料庫的權限

例子:
創建測試資料庫及Role
CREATE DATABASE test;
create table gears(id SERIAL PRIMARY KEY, model text NOT NULL, buy_date DATE NOT NULL);
如果要設定music_lover Role底下的User無法存取特定table,可以使用下面的指令:
REVOKE ALL ON TABLE gears FROM music_lover;
接著當我們要賦予Role對於資料庫進行SELECT的權限,則可以透過以下指令:
GRANT SELECT ON TABLE gears TO music_lover;
經過這樣操作之後,music_lover 這個Role在登入資料庫之後,對於gears table裡面的內容只能做查詢的動作。

https://ithelp.ithome.com.tw/upload/images/20220902/20114934qMOB3OB2eS.png

刪除現有的Role

例子:
DROP role rabbit;
當有權限或是物件的所有權在role身上的時候,移除會出現錯誤訊息,要把上面的權限進行移除與/或轉讓到其他的role之後才能刪除。
https://ithelp.ithome.com.tw/upload/images/20220902/20114934Ccs8aP0a41.png

修改現有的Role

ALTER ROLE name WITH OPTION;可以為特定的Role增加選項,例如ALTER ROLE rabbit WITH SUPERUSER(超級使用者權限)/CREATEDB(創建資料庫的能力)/CREATEROLE(創建Role的能力)
ALTER ROLE name RENAME TO new_name;可以將Role進行重新命名。

查看資料庫上面現有的Role

在PSQL命令列中,可以輸入'\du'指令
https://ithelp.ithome.com.tw/upload/images/20220902/20114934WmAwmmbnte.png

Role的權限繼承

在使用者執行操作的時候,PostgreSQL會檢查使用者的Role是否有權執行該指令,如果沒有明確被授權的話,PostgreSQL會去尋找這個Role所屬的Role以及PUBLIC role。
如果這樣依然沒有找到對應的權限,則會繼續往上一層有設定INHERIT的role去找,最後沒有找到權限的話,操作就會被拒絕。
在定義Role的時候可以加入INHERIT/NOINHERIT來決定role所帶的權限是否能繼承給底下的Role。


上一篇
Hello Postgres
下一篇
PostgreSQL特性介紹-MVCC
系列文
三十天,PG與我30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言